package com.gz.jdbc.datasource;

import org.apache.commons.dbutils.QueryRunner;
import org.junit.jupiter.api.Test;

import java.sql.Connection;

public class DBUtils_use {
    //使用apache-DBUtils 工具类 + druid 完成对表的crud操作

    @Test
    public void testQueryandDml() throws Exception {

        //1.得到(druid)连接
        Connection connection = JdbcUtilsByDruid.getConnection();
        //2.使用 DBUtils 类和接口，先引入DBUtils 相关的jar，加入到项目(Add as Library)
        //3.创建 QueryRunner
        QueryRunner queryRunner = new QueryRunner();
        //4.就可以执行相关的方法，返回ArrayList结果集
//        String sql = "select * from bank where id >= ?";
//        String sql = "select score from bank where id >= ?";
        String sql = "insert into bank values(null,?)";
        //如果不用*，其余值默认为null和0

        //(1)query方法就是执行sql语句，得到ResultSet--封装到-->ArrayList集合中
        //(2)返回集合
        //(3)connection连接
        //(4)sql: 执行sql语句
        //(5)new BeanListHandler<>(Table.class):在将resultset->table对象封装到ArrayList中
        //(6)这里的1就是sql语句中的?
        //(7)底层得到的resultset和preparedstatement，会在query执行完自动关闭，不用担心泄露

        //返回多行多列 BeanListHandler<> ,返回List<Table>
        // 单行多列BeanHandler<>,返回Table(类)
        // 单行单列ScalarHandler<>,返回Object(可以是String、int等)
//        List<Table> query = queryRunner.query(connection, sql, new BeanListHandler<>(Table.class),1);
//        for (Table table : query) {
//            System.out.println(table);
//        }

        //使用DBUtils完成sql的dml(update,insert,delete)操作
        int affectedRow = queryRunner.update(connection, sql, 88);//影响行数
        System.out.println(affectedRow);

        //释放资源
        //底层得到的resultset和preparedstatement，会在query执行完自动关闭，不用担心泄露
        JdbcUtilsByDruid.close(null,null,connection);
    }
}
